package cn.remexs.flink.udf.geo;

import cn.remexs.flink.udf.GeoUtils;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.functions.ScalarFunction;

import java.math.BigDecimal;

/**
 * 坐标转换
 */
public class ZtToWgs84 extends ScalarFunction {
    public ZtToWgs84() {
    }

    public String eval(@DataTypeHint("DECIMAL(32,16)") BigDecimal lon, @DataTypeHint("DECIMAL(32,16)") BigDecimal lat) {

        try {
            if (lon.doubleValue() > 10000000) {
                double[] wgs84 = GeoUtils.mercatorToLonLat(lon.doubleValue(), lat.doubleValue(), true);
                return GeoUtils.buildWkt(wgs84[0], wgs84[1]);
            } else {
                double[] wgs84 = new double[]{lon.doubleValue(), lat.doubleValue()};
                return GeoUtils.buildWkt(wgs84[0], wgs84[1]);
            }
        } catch (Exception e) {
            return null;
        }
    }
}
